package singlecase;

/**
 * @Description:单例 -懒汉式-多线程问题解决
 * @Author: csh
 * @CreateDate: 2018/8/20$ 10:49$
 * @Version: 1.0
 * 针对多次new对象的多线程问题解决
 * 1.解决方案一加上：synchronized 同步
 *      问题会造成性能问题
 * 2.通过类锁synchronized（class）来解决性能问题
 *      分析：假定有两个线程同时进入null==instance 其中一个线程抢到了synchronized (SingletonObject4.class)这个类锁，另外一个线程在等待
 *           前面的线程处理完后释放锁，后面的线进再去判断if(null==instance)不成立就走了。
 *      问题:存在一个隐患
 *  3.volatile 解决了内存可见性
 */
public class LazySigletonThread {

    /** 创建空实例*/
    private static volatile LazySigletonThread lazySigleton;


    /** 设置空构造函数 */
    private LazySigletonThread(){

    }
    /** 这个方法比上面有所改进*/
    public static  LazySigletonThread getLazySigleton(){
        if(null==lazySigleton){
            synchronized (LazySigletonThread.class){
                lazySigleton = new LazySigletonThread();
            }
        }
        return lazySigleton;
    }
}
